#pragma once 

#include <iostream>
#include <string>
#include <cstdarg>
#include <time.h>
#include <cstring>

//日志等级
#define DEBUG   0 //调试
#define NORMAL  1 //正常
#define WARNING 2 //警告
#define ERROR   3 //错误但不影响后续的执行
#define FATAL   4 //致命(严重错误)无法继续运行

#define LOGFILE "./log.txt"

const char* gLevelMap[] = {
    "DEBUG",
    "NORMAL",
    "WARNING",
    "ERROR",
    "FATAL",
};

//完整的日志功能,至少: 日志等级 时间 日志内容 支持用户自定义
void logMessage(int level,const char* format,...)
{   
    //提取可变参数
    // va_list ap;
    // va_start(ap,format);
    //while()
    // va_end(ap);
#ifndef DEBUG_SHOW
    if(level == DEBUG) return;
#endif

    char stdBuffer[1024];//标准部分
    time_t timep;
    time(&timep);
    snprintf(stdBuffer,sizeof(stdBuffer),"%s %s",gLevelMap[level],ctime(&timep));
    stdBuffer[strlen(stdBuffer)-1] = '\0';

    char logBuffer[1024];//自定义部分
    va_list ap;
    va_start(ap,format);
    // vprintf(format,ap);
    vsnprintf(logBuffer,sizeof(logBuffer),format,ap);
    va_end(ap);

    //FILE* fp = fopen(LOGFILE,"a");
    // if(fp == nullptr)
    // {
    //     perror("fopen");
    // }

    printf("%s %s\n",stdBuffer,logBuffer);
    //fprintf(fp,"%s %s\n",stdBuffer,logBuffer);
    //fclose(fp);
}